package cc.rengu.igas.bomp.common.dao;

import cc.rengu.igas.bomp.common.entity.InspectTaskDetail;
import cc.rengu.oltp.utility.bean.PageInfo;
import cc.rengu.oltp.utility.bean.PageResult;

import java.util.List;

/**
 * 巡检任务明细信息表操作接口类
 * Created by 王成 on 2020/3/5
 */
public interface InspectTaskDetailMapper {
    /**
     * 登记巡检任务明细信息
     *
     * @param inspectTaskDetail 巡检任务明细信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int insertInspectTaskDetail(InspectTaskDetail inspectTaskDetail) throws Exception;

    /**
     * 更新巡检任务明细信息
     *
     * @param inspectTaskDetail 巡检任务明细信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int updateInspectTaskDetailById(InspectTaskDetail inspectTaskDetail) throws Exception;

    /**
     * 根据非业务主键查询巡检任务明细信息
     *
     * @param instId 多法人标识
     * @param id     非业务主键
     * @return 巡检任务明细信息
     * @throws Exception 异常
     */
    InspectTaskDetail selectInspectTaskDetailById(String instId, String id) throws Exception;

    /**
     * 根据主键查询巡检任务明细信息
     *
     * @param instId        多法人标识
     * @param inspectTaskNo 巡检信息编号
     * @param mchntNo       商户号
     * @return 巡检任务明细信息
     * @throws Exception 异常
     */
    InspectTaskDetail selectInspectTaskDetailByPrimaryKey(String instId, String inspectTaskNo, String mchntNo) throws Exception;

    /**
     * 根据巡检经理查询巡检任务明细信息
     *
     * @param instId           多法人标识
     * @param managerId        巡检经理
     * @param inspectBeginTime 巡检开始时间
     * @param inspectEndTime   巡检截止时间
     * @return 巡检任务明细信息
     * @throws Exception 异常
     */
    List<InspectTaskDetail> selectInspectTaskDetailByManagerId(String instId, String managerId, String inspectBeginTime, String inspectEndTime) throws Exception;

    /**
     * 根据巡检方式查询巡检任务明细信息
     *
     * @param instId           多法人标识
     * @param inspectType      巡检方式
     * @param inspectBeginTime 巡检开始时间
     * @param inspectEndTime   巡检截止时间
     * @return 巡检任务明细信息
     * @throws Exception 异常
     */
    List<InspectTaskDetail> selectInspectTaskDetailByInspectType(String instId, String inspectType, String inspectBeginTime, String inspectEndTime) throws Exception;

    /**
     * 根据巡检任务查询巡检任务明细信息
     *
     * @param instId        多法人标识
     * @param inspectTaskNo 巡检任务号
     * @return 巡检任务明细信息
     * @throws Exception 异常
     */
    List<InspectTaskDetail> selectInspectTaskDetailByInspectTaskNo(String instId, String inspectTaskNo) throws Exception;

    /**
     * 根据任务号查询已巡检商户数量
     *
     * @param instId        多法人标识
     * @param inspectTaskNo 巡检任务号
     * @return 巡检任务明细信息
     * @throws Exception 异常
     */
    InspectTaskDetail selectBompInspectTaskDetailCountByTaskNo(String instId, String inspectTaskNo) throws Exception;

    /**
     * 根据任务号查询为巡检商户数量
     *
     * @param instId        多法人标识
     * @param inspectTaskNo 巡检任务号
     * @return 巡检任务明细信息
     * @throws Exception 异常
     */
    InspectTaskDetail selectBompInspectTaskDetailNeedCountByTaskNo(String instId, String inspectTaskNo) throws Exception;

    /**
     * 根据巡检任务查询巡检任务明细信息
     *
     * @param instId            多法人标识
     * @param inspectTaskDetail 查询巡检任务详情条件信息
     * @return 巡检任务明细信息列表
     * @throws Exception 异常
     */
    PageResult selectBompInspectTaskDetailByQueryFilter(String instId, InspectTaskDetail inspectTaskDetail, PageInfo pageInfo) throws Exception;

    /**
     * 根据商户号或巡检类型查询已巡检的巡检任务详情信息
     *
     * @param instId  多法人标识
     * @param mchntNo 商户号
     * @return 巡检任务明细信息列表
     * @throws Exception 异常
     */
    List<InspectTaskDetail> selectBompInspectTaskDetailByMchntNoOrInspectType(String instId, String mchntNo, String inspectType) throws Exception;


    /**
     * 根据商户号查询商户当前是否有巡检任务
     *
     * @param instId  多法人标识
     * @param mchntNo 巡检任务号
     * @return 巡检任务明细信息
     * @throws Exception 异常
     */
    InspectTaskDetail selectBompInsepectTaskDetailByMchntNoAndStatus(String instId, String mchntNo) throws Exception;

    /**
     * 根据巡检任务查询巡检任务明细信息
     *
     * @param inspectTaskDetail 查询巡检任务详情条件信息
     * @return 巡检任务明细信息列表
     * @throws Exception 异常
     */
    PageResult selectInspectTaskDetailByQueryFilter(InspectTaskDetail inspectTaskDetail, PageInfo pageInfo) throws Exception;
}
